package T2_10;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class T9 {
    public List<Integer> findAnagrams(String s, String p) {
        //思路：滑动窗口
        //1 定义两个int数组，使用字符减法将字符出现的次数映射到对应的数组
        //2 定义两个指针作为滑动窗口的左右边界
        //3 左右边界同时移动，将符合要求的字串起始索引放入list
        List<Integer> res=new ArrayList<>();
        int[] sCount=new int[26];
        int[] pCount = new int[26];
        if (s.length()<p.length()){
            return new ArrayList<>();
        }
        //判断是否能得到索引为0的结果
        for (int i = 0; i < p.length(); i++) {
            sCount[s.charAt(i)-'a']++;
            pCount[p.charAt(i)-'a']++;
        }
        if (Arrays.equals(sCount,pCount))res.add(0);
        for (int i = p.length(); i < s.length(); i++) {
            //删除因移动而应该被踢出的字符
            sCount[s.charAt(i-p.length())-'a']--;
            sCount[s.charAt(i)-'a']++;
            if (Arrays.equals(sCount,pCount)){
                res.add(i-p.length()+1);
            }
        }
        return res;
    }
}
